maybe to avoid "dying of SIGKILL" when amaroK exits, what we need to do is fork() and remain as a child process while exiting in the parent, where the finalization (save config, etc) process would take place, and the parent process would already be dead.  This could be detected upon SIGTERM or upon closing of STDIN.  But we sure have to decide which one to avoid two fork()'s.

dynamic playlist handling:
- necesitamos sacar la lista de  nombres de smartplaylist y su SQLQUERY asociado
- a cada SQLQUERY viene con un SELECT inicial y despues un FROM tags, hay que chapetear lo que esta entre el SELECT y el FROM tags, reemplazandolo con tags.url, para poder armar mi subquery tranquilo
- despues a get similar songs hay que aumentarle un parametro extra, y si esta el parametro extra, debe appendearse un INNER JOIN (subquery) al SQL de busqueda
- finalmente debe ponerse un drop down en el UI que diga:
By selecting one of the top [    -+] similar songs in Tempo [-------------|---] Spectrum
from ( ) my entire music collection ( ) the dynamic playlist named [ Top dance      |V]
y amarrarse esta huevada de lo que debe ser:
- amarrarse a configuracion
- proceso super dynamic loop e interfaz de usuario deben ser tolerantes ante la posibilidad que el dynamic playlist escogido por el usuario haya simplemente desaparecido, y si esto sucediese, deberia automaticamente retornarse a ( ) my entire music collection
- interfaz de usuario deberia actualizarse cuando se crean / borran dynamic playlists


Falta robustez para manejar los symlinks (cuando se indexean (recordemos que amarok puede tener una cancion y un simlink a esa misma cancion en la coleccion), cuando se hace el super dj loop tambien).

poner handlers en los metodos de ui para que salga error boxes si algo sale mal....

falta una funcion y un llamado a esa funcion que purge los archivos que ya no existen en el disco... o en la coleccion?  no se aun como sera esa hua.

DEbe ser posible que, cuando una cancion no pudo descodificarse (por ejemplo tenemos una version vieja de soganalysis que no decodifica FLACs), se la marque, cosa que cuando tengamos una version nueva (detectemos un cambio en la version de esa nota) podamos reintentar rescanear SOLO ESAS CANCIONES. Osea un flag "could not be scanned".  Al iniciar sacariamos la "version" actual de songanalysis (una especie de version string "1.2.1+mp3+flac+ogg"), la comparariamos con la version de la ultima ejecucion, y si son diferentes, buscariamos las que no pudieron escanearse, y las eliminariamos de la tabla analysis para que sean reescaneadas en el proceso subsiguiente.

BTW, el chequeo de interface es ortogonal, por supuesto, y debe permanecer, cosa que cuando cambie la interfaz, se reescanee todo.  Probablemente amarok-songanalysis deba exigir determinada interfaz X.  O tal vez podemos solucionar ese problema haciendo comandos paralelos.  Songanalysis2, songanalysis3... who knows.  that's kind of far away for now.

En el search box, poner botones "Insert after current song" y "Append to playlist".

y tenemos que añadir a la configuracion y al search window algo para que haya tempo drift, cosa que el playlist se vaya haciendo mas rapido o mas lento cada vez

el algoritmo del tempo esta MAL.  segun yo el algoritmo correcto es hacer que la cancion pase por un bandpass filter < 200hz, y "reproducirla" detectando beats, haciendo una lista de los tiempos entre beats (probablemente estoy se pueda programar en mmpython), y sacando la moda de esa lista, ese debe ser el tempo.  buscar info sobre raytracing beat detection.

revisar el algoritmo de spectrum similarity.  pvh puede ayudar.

permitir que esta huevadilla continue tranquila haciendo Fork! si amarok sale, y permitirle reattacharlo de nuevo si es que amarok se vuelve a reabrir.  esto es mas o menos complicadon pero si se puede.  el piquete es que no se si al salir y volver a entrar sea necesario emitir de nuevo la señal de quitar esa hua.  osea lo mas facil: al recibir la indicacion de salir debera hacer algo como disable_ui ; fork() parent exit child remain, al entrar y reejecutarse debe buscarse a si mismo y matarse sigterm.  pero, como distinguimos entre amarok normal exit y amarok finish script?

multiple interface (pygtk, pyqt) or do only pygtk until i have pyqt.

- detect modified files, so i can re-analyze them.  there is no way to do this even with a database schema change because if a file got changed (e.g. replaced by another file), the database has no info on that.  this may actually require the construction of the uniq ID tracker code branch patch.
   if modified_date > scan_date:
       rescan (whatever that implies - regenerating the extattrs or rereading them)

- create DB schema and test whether the DB schema is there

- make distribution generator script